/*
 * Copyright (C) 2008-12  Bernhard Hobiger
 *
 * This file is part of HoDoKu.
 *
 * HoDoKu is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * HoDoKu is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with HoDoKu. If not, see <http://www.gnu.org/licenses/>.
 */
package sudoku;

import javax.swing.*;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import java.util.Enumeration;

/**
 *
 * @author  hobiwan
 */
public class ConfigFindAllStepsPanel extends javax.swing.JPanel {

    private static String[] fishSizes = {"2", "3", "4", "5", "6", "7"};
    private static String[] finSizes = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"};
    private static String[] fishTypes = {"Basic", "Basic/Franken", "Basic/Franken/Mutant"};
    private static String[] alsChainLengths = {"4", "5", "6", "7"};
    private static final long serialVersionUID = 1L;
    private StepConfig[] steps;
    private String fishCandidates;
    private String krakenFishCandidates;

    /** Creates new form ConfigFindAllStepsPanel */
    @SuppressWarnings("unchecked")
    public ConfigFindAllStepsPanel() {
        initComponents();

        stepTree.setCellRenderer(new CheckRenderer());
        stepTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
        stepTree.putClientProperty("JTree.lineStyle", "Angled");

        fishFromComboBox.removeAllItems();
        fishToComboBox.removeAllItems();
        krakenFishFromComboBox.removeAllItems();
        krakenFishToComboBox.removeAllItems();
        for (int i = 0; i < fishSizes.length; i++) {
            fishFromComboBox.addItem(fishSizes[i]);
            fishToComboBox.addItem(fishSizes[i]);
            krakenFishFromComboBox.addItem(fishSizes[i]);
            krakenFishToComboBox.addItem(fishSizes[i]);
        }

        fishMaxFinsComboBox.removeAllItems();
        fishMaxEndoFinsComboBox.removeAllItems();
        krakenFishMaxFinsComboBox.removeAllItems();
        krakenFishMaxEndoFinsComboBox.removeAllItems();
        for (int i = 0; i < finSizes.length; i++) {
            fishMaxFinsComboBox.addItem(finSizes[i]);
            fishMaxEndoFinsComboBox.addItem(finSizes[i]);
            krakenFishMaxFinsComboBox.addItem(finSizes[i]);
            krakenFishMaxEndoFinsComboBox.addItem(finSizes[i]);
        }

        fishTypeComboBox.removeAllItems();
        krakenFishTypeComboBox.removeAllItems();
        for (int i = 0; i < fishTypes.length; i++) {
            fishTypeComboBox.addItem(fishTypes[i]);
            krakenFishTypeComboBox.addItem(fishTypes[i]);
        }
        
        alsChainLengthComboBox.removeAllItems();
        for (int i = 0; i < alsChainLengths.length; i++) {
            alsChainLengthComboBox.addItem(alsChainLengths[i]);
        }

        // Alle Werte aus den Default-Optionen setzen
        initAll(false);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        resetButton = new javax.swing.JButton();
        jPanel1 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        stepTree = new javax.swing.JTree();
        fishPanel = new javax.swing.JPanel();
        fishCheckBox = new javax.swing.JCheckBox();
        fishTypeLabel = new JLabel();
        fishTypeComboBox = new javax.swing.JComboBox();
        fishFromLabel = new JLabel();
        fishFromComboBox = new javax.swing.JComboBox();
        fishToLabel = new JLabel();
        fishToComboBox = new javax.swing.JComboBox();
        fishMaxFinsLabel = new JLabel();
        fishMaxFinsComboBox = new javax.swing.JComboBox();
        fishMaxEndoFinsLabel = new JLabel();
        fishMaxEndoFinsComboBox = new javax.swing.JComboBox();
        fishCheckTemplatesCheckBox = new javax.swing.JCheckBox();
        fishCandidatesLabel = new JLabel();
        fishCandidatesResultLabel = new JLabel();
        fishCandidatesButton = new javax.swing.JButton();
        krakenFishPanel = new javax.swing.JPanel();
        krakenFishMaxEndoFinsComboBox = new javax.swing.JComboBox();
        krakenFishMaxEndoFinsLabel = new JLabel();
        krakenFishMaxFinsLabel = new JLabel();
        krakenFishMaxFinsComboBox = new javax.swing.JComboBox();
        krakenFishFromLabel = new JLabel();
        krakenFishFromComboBox = new javax.swing.JComboBox();
        krakenFishToLabel = new JLabel();
        krakenFishToComboBox = new javax.swing.JComboBox();
        krakenFishTypeComboBox = new javax.swing.JComboBox();
        krakenFishTypeLabel = new JLabel();
        krakenFishCandidatesLabel = new JLabel();
        krakenFishCandidatesResultLabel = new JLabel();
        krakenFishCandidatesButton = new javax.swing.JButton();
        alsPanel = new javax.swing.JPanel();
        alsChainLengthLabel = new JLabel();
        alsChainLengthComboBox = new javax.swing.JComboBox();
        alsBiDirCheckBox = new javax.swing.JCheckBox();

        resetButton.setMnemonic(java.util.ResourceBundle.getBundle("intl/ConfigFindAllStepsPanel").getString("ConfigFindAllStepsPanel.resetButton.mnemonic").charAt(0));
        java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("intl/ConfigFindAllStepsPanel"); // NOI18N
        resetButton.setText(bundle.getString("ConfigFindAllStepsPanel.resetButton.text")); // NOI18N
        resetButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                resetButtonActionPerformed(evt);
            }
        });

        stepTree.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                stepTreeMousePressed(evt);
            }
        });
        jScrollPane1.setViewportView(stepTree);

        fishPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle.getString("ConfigFindAllStepsPanel.fishPanel.border"))); // NOI18N

        fishCheckBox.setMnemonic(java.util.ResourceBundle.getBundle("intl/ConfigFindAllStepsPanel").getString("ConfigFindAllStepsPanel.fishCheckBox.mnemonic").charAt(0));
        fishCheckBox.setText(bundle.getString("ConfigFindAllStepsPanel.fishCheckBox.text")); // NOI18N

        fishTypeLabel.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("intl/ConfigFindAllStepsPanel").getString("ConfigFindAllStepsPanel.fishTypeLabel.mnemonic").charAt(0));
        fishTypeLabel.setLabelFor(fishTypeComboBox);
        fishTypeLabel.setText(bundle.getString("ConfigFindAllStepsPanel.fishTypeLabel.text")); // NOI18N

        fishTypeComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        fishFromLabel.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("intl/ConfigFindAllStepsPanel").getString("ConfigFindAllStepsPanel.fishFromLabel.mnemonic").charAt(0));
        fishFromLabel.setLabelFor(fishFromComboBox);
        fishFromLabel.setText(bundle.getString("ConfigFindAllStepsPanel.fishFromLabel.text")); // NOI18N

        fishFromComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        fishToLabel.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("intl/ConfigFindAllStepsPanel").getString("ConfigFindAllStepsPanel.fishToLabel.mnemonic").charAt(0));
        fishToLabel.setLabelFor(fishToComboBox);
        fishToLabel.setText(bundle.getString("ConfigFindAllStepsPanel.fishToLabel.text")); // NOI18N

        fishToComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        fishMaxFinsLabel.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("intl/ConfigFindAllStepsPanel").getString("ConfigFindAllStepsPanel.fishMaxFinsLabel.mnemonic").charAt(0));
        fishMaxFinsLabel.setLabelFor(fishMaxFinsComboBox);
        fishMaxFinsLabel.setText(bundle.getString("ConfigFindAllStepsPanel.fishMaxFinsLabel.text")); // NOI18N

        fishMaxFinsComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        fishMaxEndoFinsLabel.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("intl/ConfigFindAllStepsPanel").getString("ConfigFindAllStepsPanel.fishMaxEndoFinsLabel.mnemonic").charAt(0));
        fishMaxEndoFinsLabel.setLabelFor(fishMaxEndoFinsComboBox);
        fishMaxEndoFinsLabel.setText(bundle.getString("ConfigFindAllStepsPanel.fishMaxEndoFinsLabel.text")); // NOI18N

        fishMaxEndoFinsComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        fishCheckTemplatesCheckBox.setMnemonic(java.util.ResourceBundle.getBundle("intl/ConfigFindAllStepsPanel").getString("ConfigFindAllStepsPanel.fishCheckTemplatesCheckBox.mnemonic").charAt(0));
        fishCheckTemplatesCheckBox.setText(bundle.getString("ConfigFindAllStepsPanel.fishCheckTemplatesCheckBox.text")); // NOI18N

        fishCandidatesLabel.setText(bundle.getString("ConfigFindAllStepsPanel.fishCandidatesLabel.text")); // NOI18N

        fishCandidatesResultLabel.setText(bundle.getString("ConfigFindAllStepsPanel.fishCandidatesResultLabel.text")); // NOI18N

        fishCandidatesButton.setText(bundle.getString("ConfigFindAllStepsPanel.fishCandidatesButton.text")); // NOI18N
        fishCandidatesButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                fishCandidatesButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout fishPanelLayout = new javax.swing.GroupLayout(fishPanel);
        fishPanel.setLayout(fishPanelLayout);
        fishPanelLayout.setHorizontalGroup(
            fishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(fishPanelLayout.createSequentialGroup()
                .addGroup(fishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(fishPanelLayout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(fishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(fishTypeLabel)
                            .addComponent(fishFromLabel)
                            .addComponent(fishMaxFinsLabel)
                            .addComponent(fishMaxEndoFinsLabel))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(fishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(fishPanelLayout.createSequentialGroup()
                                .addGroup(fishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(fishFromComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(fishMaxFinsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(fishMaxEndoFinsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(fishToLabel)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(fishToComboBox, 0, 96, Short.MAX_VALUE))
                            .addComponent(fishTypeComboBox, 0, 180, Short.MAX_VALUE)))
                    .addGroup(fishPanelLayout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addComponent(fishCheckBox))
                    .addGroup(fishPanelLayout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(fishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(fishCheckTemplatesCheckBox)
                            .addGroup(fishPanelLayout.createSequentialGroup()
                                .addComponent(fishCandidatesLabel)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(fishCandidatesResultLabel)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(fishCandidatesButton)))))
                .addContainerGap())
        );

        fishPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {fishMaxEndoFinsComboBox, fishMaxFinsComboBox});

        fishPanelLayout.setVerticalGroup(
            fishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(fishPanelLayout.createSequentialGroup()
                .addComponent(fishCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(fishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(fishTypeLabel)
                    .addComponent(fishTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(fishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(fishFromLabel)
                    .addComponent(fishFromComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(fishToLabel)
                    .addComponent(fishToComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(fishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(fishMaxFinsLabel)
                    .addComponent(fishMaxFinsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(fishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(fishMaxEndoFinsLabel)
                    .addComponent(fishMaxEndoFinsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(fishCheckTemplatesCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(fishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(fishCandidatesLabel)
                    .addComponent(fishCandidatesResultLabel)
                    .addComponent(fishCandidatesButton)))
        );

        krakenFishPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle.getString("ConfigFindAllStepsPanel.krakenFishPanel.border"))); // NOI18N

        krakenFishMaxEndoFinsComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        krakenFishMaxEndoFinsLabel.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("intl/ConfigFindAllStepsPanel").getString("ConfigFindAllStepsPanel.krakenFishMaxEndoFinsLabel.mnemonic").charAt(0));
        krakenFishMaxEndoFinsLabel.setLabelFor(krakenFishMaxEndoFinsComboBox);
        krakenFishMaxEndoFinsLabel.setText(bundle.getString("ConfigFindAllStepsPanel.krakenFishMaxEndoFinsLabel.text")); // NOI18N

        krakenFishMaxFinsLabel.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("intl/ConfigFindAllStepsPanel").getString("ConfigFindAllStepsPanel.krakenFishMaxFinsLabel.mnemonic").charAt(0));
        krakenFishMaxFinsLabel.setLabelFor(krakenFishMaxFinsComboBox);
        krakenFishMaxFinsLabel.setText(bundle.getString("ConfigFindAllStepsPanel.krakenFishMaxFinsLabel.text")); // NOI18N

        krakenFishMaxFinsComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        krakenFishFromLabel.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("intl/ConfigFindAllStepsPanel").getString("ConfigFindAllStepsPanel.krakenFishFromLabel.mnemonic").charAt(0));
        krakenFishFromLabel.setLabelFor(krakenFishFromComboBox);
        krakenFishFromLabel.setText(bundle.getString("ConfigFindAllStepsPanel.krakenFishFromLabel.text")); // NOI18N

        krakenFishFromComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        krakenFishToLabel.setLabelFor(krakenFishToComboBox);
        krakenFishToLabel.setText(bundle.getString("ConfigFindAllStepsPanel.krakenFishToLabel.text")); // NOI18N

        krakenFishToComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        krakenFishTypeComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        krakenFishTypeLabel.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("intl/ConfigFindAllStepsPanel").getString("ConfigFindAllStepsPanel.krakenFishTypeLabel.mnemonic").charAt(0));
        krakenFishTypeLabel.setLabelFor(krakenFishTypeComboBox);
        krakenFishTypeLabel.setText(bundle.getString("ConfigFindAllStepsPanel.krakenFishTypeLabel.text")); // NOI18N

        krakenFishCandidatesLabel.setText(bundle.getString("ConfigFindAllStepsPanel.krakenFishCandidatesLabel.text")); // NOI18N

        krakenFishCandidatesResultLabel.setText(bundle.getString("ConfigFindAllStepsPanel.krakenFishCandidatesResultLabel.text")); // NOI18N

        krakenFishCandidatesButton.setText(bundle.getString("ConfigFindAllStepsPanel.krakenFishCandidatesButton.text")); // NOI18N
        krakenFishCandidatesButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                krakenFishCandidatesButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout krakenFishPanelLayout = new javax.swing.GroupLayout(krakenFishPanel);
        krakenFishPanel.setLayout(krakenFishPanelLayout);
        krakenFishPanelLayout.setHorizontalGroup(
            krakenFishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(krakenFishPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(krakenFishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(krakenFishPanelLayout.createSequentialGroup()
                        .addGroup(krakenFishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(krakenFishTypeLabel)
                            .addComponent(krakenFishFromLabel)
                            .addComponent(krakenFishMaxFinsLabel)
                            .addComponent(krakenFishMaxEndoFinsLabel))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(krakenFishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(krakenFishPanelLayout.createSequentialGroup()
                                .addGroup(krakenFishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(krakenFishFromComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(krakenFishMaxFinsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(krakenFishMaxEndoFinsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(krakenFishToLabel)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(krakenFishToComboBox, 0, 96, Short.MAX_VALUE))
                            .addComponent(krakenFishTypeComboBox, 0, 180, Short.MAX_VALUE)))
                    .addGroup(krakenFishPanelLayout.createSequentialGroup()
                        .addComponent(krakenFishCandidatesLabel)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(krakenFishCandidatesResultLabel)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(krakenFishCandidatesButton)))
                .addContainerGap())
        );

        krakenFishPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {krakenFishMaxEndoFinsComboBox, krakenFishMaxFinsComboBox});

        krakenFishPanelLayout.setVerticalGroup(
            krakenFishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(krakenFishPanelLayout.createSequentialGroup()
                .addGroup(krakenFishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(krakenFishTypeLabel)
                    .addComponent(krakenFishTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(krakenFishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(krakenFishFromLabel)
                    .addComponent(krakenFishFromComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(krakenFishToLabel)
                    .addComponent(krakenFishToComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(krakenFishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(krakenFishMaxFinsLabel)
                    .addComponent(krakenFishMaxFinsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(krakenFishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(krakenFishMaxEndoFinsLabel)
                    .addComponent(krakenFishMaxEndoFinsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(krakenFishPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(krakenFishCandidatesLabel)
                    .addComponent(krakenFishCandidatesResultLabel)
                    .addComponent(krakenFishCandidatesButton))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        alsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle.getString("ConfigFindAllStepsPanel.alsPanel.border.title"))); // NOI18N

        alsChainLengthLabel.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("intl/ConfigFindAllStepsPanel").getString("ConfigFindAllStepsPanel.alsChainLengthLabel.mnemonic").charAt(0));
        alsChainLengthLabel.setLabelFor(alsChainLengthComboBox);
        alsChainLengthLabel.setText(bundle.getString("ConfigFindAllStepsPanel.alsChainLengthLabel.text")); // NOI18N

        alsChainLengthComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "4", "5", "6", "7" }));

        alsBiDirCheckBox.setMnemonic(java.util.ResourceBundle.getBundle("intl/ConfigFindAllStepsPanel").getString("ConfigFindAllStepsPanel.alsBiDirCheckBox.mnemonic").charAt(0));
        alsBiDirCheckBox.setText(bundle.getString("ConfigFindAllStepsPanel.alsBiDirCheckBox.text")); // NOI18N

        javax.swing.GroupLayout alsPanelLayout = new javax.swing.GroupLayout(alsPanel);
        alsPanel.setLayout(alsPanelLayout);
        alsPanelLayout.setHorizontalGroup(
            alsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(alsPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(alsChainLengthLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(alsChainLengthComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(alsBiDirCheckBox)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        alsPanelLayout.setVerticalGroup(
            alsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(alsPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(alsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(alsChainLengthLabel)
                    .addComponent(alsChainLengthComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(alsBiDirCheckBox))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 211, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(alsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGap(10, 10, 10))
                    .addComponent(krakenFishPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(fishPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGap(0, 0, 0))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
                        .addComponent(fishPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(krakenFishPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(alsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(resetButton))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(resetButton)
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents

private void stepTreeMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_stepTreeMousePressed
    TreePath path = stepTree.getPathForLocation(evt.getX(), evt.getY());
    if (path == null) {
        return;
    }
    CheckNode act = (CheckNode) path.getLastPathComponent();
    CheckNode last = (CheckNode) stepTree.getLastSelectedPathComponent();
    if (act != null && last != null && act == last) {
        last.toggleSelectionState();
        stepTree.repaint();
    }
}//GEN-LAST:event_stepTreeMousePressed

private void resetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetButtonActionPerformed
    initAll(true);
}//GEN-LAST:event_resetButtonActionPerformed

private void fishCandidatesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fishCandidatesButtonActionPerformed
    FishChooseCandidatesDialog dlg = new FishChooseCandidatesDialog(null, fishCandidates);
    dlg.setVisible(true);
    fishCandidates = dlg.getFishCandidates();
    setCandidateLabel(fishCandidatesResultLabel, fishCandidates);
}//GEN-LAST:event_fishCandidatesButtonActionPerformed

private void krakenFishCandidatesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_krakenFishCandidatesButtonActionPerformed
    FishChooseCandidatesDialog dlg = new FishChooseCandidatesDialog(null, krakenFishCandidates);
    dlg.setVisible(true);
    krakenFishCandidates = dlg.getFishCandidates();
    setCandidateLabel(krakenFishCandidatesResultLabel, krakenFishCandidates);
}//GEN-LAST:event_krakenFishCandidatesButtonActionPerformed

    public void okPressed() {
        // Alle Werte übernehmen
        // Caution: steps[] is shared by ConfigSolverPanel and ConfigFindAllStepsPanel
        // okPressed() in ConfigSolverPanel has to be called first, here only the values
        // for allStepsEnabled are set
        StepConfig[] orgSteps1 = Options.getInstance().solverSteps;
        for (int i = 0; i < steps.length; i++) {
            for (int j = 0; j < orgSteps1.length; j++) {
                if (steps[i].getType() == orgSteps1[j].getType()) {
                    orgSteps1[j].setAllStepsEnabled(steps[i].isAllStepsEnabled());
                    break;
                }
            }
        }
        StepConfig[] orgSteps2 = Options.getInstance().getOrgSolverSteps();
        for (int i = 0; i < steps.length; i++) {
            for (int j = 0; j < orgSteps2.length; j++) {
                if (steps[i].getType() == orgSteps2[j].getType()) {
                    orgSteps2[j].setAllStepsEnabled(steps[i].isAllStepsEnabled());
                    break;
                }
            }
        }

        // now the rest
        Options.getInstance().setAllStepsSearchFish(fishCheckBox.isSelected());
        Options.getInstance().setAllStepsMaxFishType(fishTypeComboBox.getSelectedIndex());
        Options.getInstance().setAllStepsMinFishSize(fishFromComboBox.getSelectedIndex() + 2);
        Options.getInstance().setAllStepsMaxFishSize(fishToComboBox.getSelectedIndex() + 2);
        Options.getInstance().setAllStepsMaxFins(fishMaxFinsComboBox.getSelectedIndex());
        Options.getInstance().setAllStepsMaxEndoFins(fishMaxEndoFinsComboBox.getSelectedIndex());
        Options.getInstance().setAllStepsCheckTemplates(fishCheckTemplatesCheckBox.isSelected());

        Options.getInstance().setAllStepsKrakenMaxFishType(krakenFishTypeComboBox.getSelectedIndex());
        Options.getInstance().setAllStepsKrakenMinFishSize(krakenFishFromComboBox.getSelectedIndex() + 2);
        Options.getInstance().setAllStepsKrakenMaxFishSize(krakenFishToComboBox.getSelectedIndex() + 2);
        Options.getInstance().setAllStepsMaxKrakenFins(krakenFishMaxFinsComboBox.getSelectedIndex());
        Options.getInstance().setAllStepsMaxKrakenEndoFins(krakenFishMaxEndoFinsComboBox.getSelectedIndex());

        Options.getInstance().setAllStepsFishCandidates(fishCandidates);
        Options.getInstance().setAllStepsKrakenFishCandidates(krakenFishCandidates);

        Options.getInstance().setAllStepsAlsChainLength(alsChainLengthComboBox.getSelectedIndex() + 4);
        Options.getInstance().setAllStepsAlsChainForwardOnly(alsBiDirCheckBox.isSelected());
    }

    private void initAll(boolean setDefault) {
        // Zuerst die Daten zurücksetzen
        if (setDefault) {
            steps = Options.getInstance().copyStepConfigs(Options.DEFAULT_SOLVER_STEPS, true, false);

            fishCheckBox.setSelected(Options.ALL_STEPS_SEARCH_FISH);
            fishTypeComboBox.setSelectedIndex(Options.ALL_STEPS_MAX_FISH_TYPE);
            fishFromComboBox.setSelectedIndex(Options.ALL_STEPS_MIN_FISH_SIZE - 2);
            fishToComboBox.setSelectedIndex(Options.ALL_STEPS_MAX_FISH_SIZE - 2);
            fishMaxFinsComboBox.setSelectedIndex(Options.ALL_STEPS_MAX_FINS);
            fishMaxEndoFinsComboBox.setSelectedIndex(Options.ALL_STEPS_MAX_ENDO_FINS);
            fishCheckTemplatesCheckBox.setSelected(Options.ALL_STEPS_CHECK_TEMPLATES);

            krakenFishTypeComboBox.setSelectedIndex(Options.ALL_STEPS_MAX_KRAKEN_FISH_TYPE);
            krakenFishFromComboBox.setSelectedIndex(Options.ALL_STEPS_MIN_KRAKEN_FISH_SIZE - 2);
            krakenFishToComboBox.setSelectedIndex(Options.ALL_STEPS_MAX_KRAKEN_FISH_SIZE - 2);
            krakenFishMaxFinsComboBox.setSelectedIndex(Options.ALL_STEPS_MAX_KRAKEN_FINS);
            krakenFishMaxEndoFinsComboBox.setSelectedIndex(Options.ALL_STEPS_MAX_KRAKEN_ENDO_FINS);

            fishCandidates = Options.ALL_STEPS_FISH_CANDIDATES;
            krakenFishCandidates = Options.ALL_STEPS_KRAKEN_FISH_CANDIDATES;

            alsChainLengthComboBox.setSelectedIndex(Options.ALL_STEPS_ALS_CHAIN_LENGTH - 4);
            alsBiDirCheckBox.setSelected(Options.ALL_STEPS_ALS_CHAIN_FORWARD_ONLY);
        } else {
            steps = Options.getInstance().copyStepConfigs(Options.getInstance().solverSteps, true, false);

            fishCheckBox.setSelected(Options.getInstance().isAllStepsSearchFish());
            fishTypeComboBox.setSelectedIndex(Options.getInstance().getAllStepsMaxFishType());
            fishFromComboBox.setSelectedIndex(Options.getInstance().getAllStepsMinFishSize() - 2);
            fishToComboBox.setSelectedIndex(Options.getInstance().getAllStepsMaxFishSize() - 2);
            fishMaxFinsComboBox.setSelectedIndex(Options.getInstance().getAllStepsMaxFins());
            fishMaxEndoFinsComboBox.setSelectedIndex(Options.getInstance().getAllStepsMaxEndoFins());
            fishCheckTemplatesCheckBox.setSelected(Options.getInstance().isAllStepsCheckTemplates());

            krakenFishTypeComboBox.setSelectedIndex(Options.getInstance().getAllStepsKrakenMaxFishType());
            krakenFishFromComboBox.setSelectedIndex(Options.getInstance().getAllStepsKrakenMinFishSize() - 2);
            krakenFishToComboBox.setSelectedIndex(Options.getInstance().getAllStepsKrakenMaxFishSize() - 2);
            krakenFishMaxFinsComboBox.setSelectedIndex(Options.getInstance().getAllStepsMaxKrakenFins());
            krakenFishMaxEndoFinsComboBox.setSelectedIndex(Options.getInstance().getAllStepsMaxKrakenEndoFins());

            fishCandidates = Options.getInstance().getAllStepsFishCandidates();
            krakenFishCandidates = Options.getInstance().getAllStepsKrakenFishCandidates();

            alsChainLengthComboBox.setSelectedIndex(Options.getInstance().getAllStepsAlsChainLength() - 4);
            alsBiDirCheckBox.setSelected(Options.getInstance().isAllStepsAlsChainForwardOnly());
        }
        setCandidateLabels();

        // Baum neu laden
        buildTree();
    }

    private void setCandidateLabels() {
        setCandidateLabel(fishCandidatesResultLabel, fishCandidates);
        setCandidateLabel(krakenFishCandidatesResultLabel, krakenFishCandidates);
    }

    private void setCandidateLabel(JLabel label, String values) {
        StringBuilder tmp = new StringBuilder();
        int index = 0;
        int startCand = 0;
        int endCand = 0;
        while (index < values.length()) {
            // skip '0'
            while (index < values.length() && values.charAt(index) == '0') {
                index++;
            }
            if (index < values.length() && values.charAt(index) == '1') {
                startCand = index + 1;
            }
            while (index < values.length() && values.charAt(index) == '1') {
                index++;
            }
            if (startCand > 0) {
                endCand = index;
                if (startCand != endCand) {
                    tmp.append(startCand).append("-").append(endCand);
                } else {
                    tmp.append(startCand);
                }
                startCand = -1;
                tmp.append(",");
            }
        }
        if (startCand == 0) {
            tmp.append("-");
        }
        index = tmp.length() - 1;
        if (tmp.charAt(index) == ',') {
            tmp.delete(index, index + 1);
        }
        label.setText(tmp.toString());
    }

    public void buildTree() {
        CheckNode root = new CheckNode();
        for (int i = 0; i < steps.length; i++) {
            // we dont show: all kinds of fish and Brute Force
            if (steps[i].getCategory() == SolutionCategory.BASIC_FISH ||
                    steps[i].getCategory() == SolutionCategory.FINNED_BASIC_FISH ||
                    steps[i].getCategory() == SolutionCategory.FINNED_FRANKEN_FISH ||
                    steps[i].getCategory() == SolutionCategory.FINNED_MUTANT_FISH ||
                    steps[i].getCategory() == SolutionCategory.FRANKEN_FISH ||
                    steps[i].getCategory() == SolutionCategory.MUTANT_FISH) {
                continue;
            }
            if (steps[i].getType() == SolutionType.BRUTE_FORCE) {
                continue;
            }
            @SuppressWarnings("unchecked")
            Enumeration<CheckNode> en = (Enumeration<CheckNode>)root.children();
            CheckNode act = null;
            while (en.hasMoreElements()) {
                act = en.nextElement();
                if (act.getCategory() == steps[i].getCategory()) {
                    break;
                }
                act = null;
            }
            if (act == null) {
                // neue Kategorie
                act = new CheckNode(steps[i].getCategoryName(), true,
                        steps[i].isAllStepsEnabled() ? CheckNode.FULL : CheckNode.NONE,
                        null, true, false, false, steps[i].getCategory());
                root.add(act);
            }
            act.add(new CheckNode(steps[i].getType().getStepName(), false,
                    steps[i].isAllStepsEnabled() ? CheckNode.FULL : CheckNode.NONE,
                    steps[i], true, false, false, null));
            if (act.getSelectionState() == CheckNode.FULL && ! steps[i].isAllStepsEnabled()) {
                act.setSelectionState(CheckNode.HALF);
            }
            if (act.getSelectionState() == CheckNode.NONE && steps[i].isAllStepsEnabled()) {
                act.setSelectionState(CheckNode.HALF);
            }
        }
        DefaultTreeModel tmpModel = new DefaultTreeModel(root);
        stepTree.setModel(tmpModel);
        stepTree.setShowsRootHandles(true);
        stepTree.setRootVisible(false);
        stepTree.setRowHeight(-1);
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JCheckBox alsBiDirCheckBox;
    private javax.swing.JComboBox alsChainLengthComboBox;
    private JLabel alsChainLengthLabel;
    private javax.swing.JPanel alsPanel;
    private javax.swing.JButton fishCandidatesButton;
    private JLabel fishCandidatesLabel;
    private JLabel fishCandidatesResultLabel;
    private javax.swing.JCheckBox fishCheckBox;
    private javax.swing.JCheckBox fishCheckTemplatesCheckBox;
    private javax.swing.JComboBox fishFromComboBox;
    private JLabel fishFromLabel;
    private javax.swing.JComboBox fishMaxEndoFinsComboBox;
    private JLabel fishMaxEndoFinsLabel;
    private javax.swing.JComboBox fishMaxFinsComboBox;
    private JLabel fishMaxFinsLabel;
    private javax.swing.JPanel fishPanel;
    private javax.swing.JComboBox fishToComboBox;
    private JLabel fishToLabel;
    private javax.swing.JComboBox fishTypeComboBox;
    private JLabel fishTypeLabel;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JButton krakenFishCandidatesButton;
    private JLabel krakenFishCandidatesLabel;
    private JLabel krakenFishCandidatesResultLabel;
    private javax.swing.JComboBox krakenFishFromComboBox;
    private JLabel krakenFishFromLabel;
    private javax.swing.JComboBox krakenFishMaxEndoFinsComboBox;
    private JLabel krakenFishMaxEndoFinsLabel;
    private javax.swing.JComboBox krakenFishMaxFinsComboBox;
    private JLabel krakenFishMaxFinsLabel;
    private javax.swing.JPanel krakenFishPanel;
    private javax.swing.JComboBox krakenFishToComboBox;
    private JLabel krakenFishToLabel;
    private javax.swing.JComboBox krakenFishTypeComboBox;
    private JLabel krakenFishTypeLabel;
    private javax.swing.JButton resetButton;
    private javax.swing.JTree stepTree;
    // End of variables declaration//GEN-END:variables

}
